package com.jy.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;

import com.jy.common.convert.IntegerToBooleanConverter;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.persistence.Convert;

/**
 * <p>
 * 存储聊天过程中的消息内容
 * </p>
 *
 * @author fzg
 * @since 2024-11-18
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class ChatMessages implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 消息 ID，自增长整数类型（INT AUTO_INCREMENT）作为主键，用于唯一标识每条消息
     */
    @TableId(value = "aid", type = IdType.AUTO)
    private Long aid;

    /**
     * 发送者 ID，关联到users表中的user_id，用于标识消息的发送者
     */
    private Long senderId;

    /**
     * 接收者 ID，如果是一对一聊天，关联到users表中的user_id；如果是群组聊天，关联到chat_groups表中的group_id
     */
    private Long receiverId;

    /**
     * 消息内容，TEXT类型，用于存储消息的文本内容，可以存储较长的消息
     */
    private String messageContent;

    /**
     * 发送时间，DATETIME类型，记录消息发送的日期和时间，用于消息排序等功能
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 消息类型，如文本消息、图片消息、语音消息等，可以用整数（INT）或枚举类型（ENUM('text','image','voice')）来表示，方便对不同类型的消息进行处理	(1代表文字类型；2代表图片类型；3代表语音)
     */
    private Integer messageType;

    /**
     * 是否已读消息，默认为0，未读
     */
    @Convert(converter = IntegerToBooleanConverter.class)
    private Boolean isRead;

    /**
     * 聊天类型（与客服聊天还是与朋友聊天）
     */
    private String chatType;

    /**
     * 如果与客服聊天还需要这个商品id，默认为0
     */
    private Integer productId;

}
